package site.shenjie.m001.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import site.shenjie.m001.service.HelloService;

/**
 * 其中：
 * 类注解@RestController：
 * 标识本类（HelloController是一个接口定义类）
 * 被@RestController标记的类均会被SpringBoot自动管理
 * 类注解@RequestMapping：
 * 标记本类只处理那些uri请求，如下配置是只处理/study的请求
 * （具体配置什么要看业务需求或接口文档）
 * （本阶段是学习阶段，故，姑且配置为“/study”）
 */
@RestController
@RequestMapping("/study")
public class HelloController {
    /**
     * 属性注解@Autowired：
     * 可以创建所有被SpringBoot管理的类的对象，
     * 因为类HelloService有注解@Service，所以该类被SpringBoot管理
     * 于是，此处可以通过@Autowired声明对象helloService，
     * 并由SpringBoot构造一个HelloService的实例
     */
    @Autowired
    private HelloService helloService;

    /**
     * 方法注解@GetMapping：
     * 1 标记本方法只接受Get请求
     * （此外还有@PostMapping：只接受Post请求；@RequestMapping：接受所有类型的请求）
     * （可以看到，controller的类注解中，使用的是@RequestMapping而不是@GetMapping，
     * 因为在本controller中我们将会设置大量接口（方法），有的只能用Get请求，有的只能用Post请求，
     * 所以在controller上对请求类型不做过多限制，到方法级别再做详细地、严格地限制）
     * （此处配置的value是“/sayHello”）
     * （按本公司要求，此处的方法名应该遵守接口文档进行命名，此处注解的value与方法名相同，因为方法名叫sayHello，所以value是“/sayHello”）
     * 2 标记本方法只处理uri是“/study”下的“/sayHello”（即：/study/sayHello）
     */
    @GetMapping("/sayHello")
    public String sayHello() {
        // return "你好！";
        return helloService.sayHello();
    }
}
